﻿#pragma once
#include "zyCustomCtrol.h"
#include "zyWidget.h"

namespace BlackMoonUI {
	#define 分隔条方向_水平 0
	#define 分隔条方向_垂直 1
	#define 分隔条拖动_放开更新 0
	#define 分隔条拖动_实时更新 1
	#define 分隔条位置改变_拖动 0
	#define 分隔条位置改变_调用方法 1
	#define 分隔条位置改变_尺寸改变 2
	class zySplitter : public  zyCustomCtrol
	{
	public:
		zySplitter();
		~zySplitter();
		
		static void  WINAPI zySplitter_Destroy(zyObject* obj);
		static LRESULT WINAPI zySplitter_WndProc(zyObject* obj, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL* bHandled);
		BOOL 创建(HWND 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ -1, -1 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		BOOL 创建(zyWindow& 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ -1, -1 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		bool 置面板1(zyWindow* 参数_面板1);
		bool 置面板2(zyWindow* 参数_面板2);

		int 方向(int 参数_方向);
		int 最小宽度1(int 参数_最小宽度1);
		int 最小宽度2(int 参数_最小宽度1);
		int 分隔条宽度(int 参数_分隔条宽度);
		int 分隔条位置(int 参数_分隔条位置);
		int 拖动模式(int 参数_拖动模式);
		bool 固定面板2(bool 参数_固定面板2);
		//@备注 返回值：无 （整数型 hWnd，整数型 分隔条位置，整数型 面板2宽度或高度，整数型 改变方式【#分隔条位置改变_ 开头常量】）
		void 事件_分隔条位置被改变(TRegEvent* 参数_事件指针);

	protected:

		void OnNCDestroy();
		BOOL zySplitterWindow_OnSize(HWND hWnd, int cx, int cy, int flag);
		LRESULT zySplitterWindow_OnSetCursor(HWND hWnd);
		void zySplitterWindow_OnLButtonDown(HWND hWnd, int x, int y);
		void zySplitterWindow_OnMouseMove(HWND hWnd, int x, int y);
		void zySplitterWindow_OnLButtonUp(HWND hWnd, int x, int y);
		void zySplitterWindow_HideDrawWindow();
		void zySplitterWindow_ShowDrawWindowAndDrawLine(int Width, int color, int pos);
		void InitSplitterWindow();
		void zySplitterWindow_GetSplitterRect(HWND hWnd, RECT* rect);
	};

}

